package registnet.base;

import java.util.List;

/**
 * Defines an interface for curriculum implementations.
 */
public interface ICurriculum {

	/**
	 * Sets the code for the curriculum.
	 * @param curriculumCode
	 */
	public void setCurriculumCode(String curriculumCode);
	
	/**
	 * Returns the code for the curriculum.
	 * @return the code for the curriculum
	 */
	public String getCurriculumCode();
	
	/**
	 * Adds a course to the list of courses associated with the curriculum.
	 * @param course
	 */
	public void addCourse(ICourse course);
	
	/**
	 * Returns the list of courses associated with the curriculum.
	 * @return the list of courses associated with the curriculum.
	 */
	public List<ICourse> getAllCourses();
	
	/**
	 * Returns the list of courses associated with the curriculum which is supposed to be taken
	 * in the given year and semester.
	 * @return the list of courses associated with the curriculum which is supposed to be taken
	 * in the given year and semester.
	 */
	public List<ICourse>getCourses(int year, int semester);
	
	/**
	 * Returns the list of courses associated with the curriculum which is supposed to be taken
	 * in the given year.
	 * @return the list of courses associated with the curriculum which is supposed to be taken
	 * in the given year.
	 */
	public List<ICourse>getCourses(int year);
	
	/**
	 * Returns the course if the course with the given code is in the list of courses associated with the curriculum. 
	 * @param courseCode
	 * @return the course if the course with the given code is in the list of courses associated with the curriculum.
	 */
	public ICourse getCourse(String courseCode);
	
	/**
	 * Checks if a course with the given code is in the list of courses associated with the curriculum.
	 * @param courseCode
	 * @return true if a course with the given code is in the list of courses associated with the curriculum 
	 * and false otherwise.
	 */
	public boolean contains(String courseCode);
	
	/**
	 * Checks if the given course is in the list of courses associated with the curriculum.
	 * @param course
	 * @return true if the course is in the list of courses associated with the curriculum
	 */
	public boolean contains(ICourse course);
	
	/**
	 * Returns the total units of the courses required for the curriculum.
	 * @return the total units of the courses required for the curriculum
	 */
	public int getTotalUnits();
	
	/**
	 * Returns the total units of the courses required for the curriculum for the given year.
	 * @param year
	 * @return the total units of the courses required for the curriculum for the given year
	 */
	public int getTotalUnits(int year);
	
	/**
	 * Returns the total units of the courses required for the curriculum for the given year and semester.
	 * @param year
	 * @param semester
	 * @return the total units of the courses required for the curriculum for the given year and semester
	 */
	public int getUnits(int year, int semester);
	
}
